/**
 * 响应状态码常量
 * 
 * 采用混合方案：
 * - HTTP 状态码表达请求级别状态（200/401/403/500）
 * - 业务状态码表达业务级别状态（0, 1001-9999）
 * 
 * 业务码分段规则（超紧凑版）：
 * - 0: 成功
 * - 1000-1099: 用户模块（用户特有功能）
 * - 1100-1199: RBAC 通用（角色/菜单/字典/部门/岗位共用）
 *   - 110x: 资源已存在
 *   - 111x: 资源不存在
 *   - 112x: 资源被使用
 *   - 113x: 有子项/关联
 *   - 114x: 状态异常
 * - 1200-1999: 其他基础模块（8 个模块 x 100 码位）
 * - 2000-8999: 业务模块（70 个模块 x 100 码位）
 * - 9000-9999: 通用错误（10 个分类 x 100 码位）
 * - 400/401/403/404/500: 系统错误（映射 HTTP 码）
 */
export const RESPONSE_CODE = {
  // === 成功 ===
  /** 操作成功 */
  SUCCESS: 0,
  
  // === 用户模块（1000-1099）===
  // 用户模块比较特殊，有密码、邮箱、手机号等独特字段
  /** 用户名已存在 */
  USER_EXIST: 1001,
  /** 用户不存在 */
  USER_NOT_FOUND: 1002,
  /** 密码错误 */
  INVALID_PASSWORD: 1003,
  /** 账号已被禁用 */
  USER_DISABLED: 1004,
  
  // === RBAC 通用模块（1100-1199）===
  // 角色、菜单、字典、字典数据、部门、岗位等 RBAC 实体共用此范围
  // 编码规则：11[错误类型][实体序号]
  //   错误类型：0=已存在, 1=不存在, 2=被使用, 3=有子项, 4=状态异常
  //   实体序号：1=角色, 2=菜单, 3=字典, 4=字典数据, 5=部门, 6=岗位
  
  // 资源已存在（1101-1109）
  /** 角色代码已存在 */
  ROLE_EXIST: 1101,
  /** 菜单权限标识已存在 */
  MENU_EXIST: 1102,
  /** 字典代码已存在 */
  DICT_EXIST: 1103,
  /** 字典数据已存在 */
  DICT_DATA_EXIST: 1104,
  /** 部门代码已存在 */
  DEPT_EXIST: 1105,
  /** 岗位代码已存在 */
  POST_EXIST: 1106,
  
  // 资源不存在（1111-1119）
  /** 角色不存在 */
  ROLE_NOT_FOUND: 1111,
  /** 菜单不存在 */
  MENU_NOT_FOUND: 1112,
  /** 字典不存在 */
  DICT_NOT_FOUND: 1113,
  /** 字典数据不存在 */
  DICT_DATA_NOT_FOUND: 1114,
  /** 部门不存在 */
  DEPT_NOT_FOUND: 1115,
  /** 岗位不存在 */
  POST_NOT_FOUND: 1116,
  
  // 资源被使用（1121-1129）
  /** 角色正在使用中 */
  ROLE_IN_USE: 1121,
  /** 菜单已被角色使用 */
  MENU_IN_USE: 1122,
  /** 字典正在使用中 */
  DICT_IN_USE: 1123,
  /** 岗位正在使用中 */
  POST_IN_USE: 1126,
  
  // 有子项/关联（1131-1139）
  /** 菜单下存在子菜单 */
  MENU_HAS_CHILDREN: 1132,
  /** 部门下存在子部门 */
  DEPT_HAS_CHILDREN: 1135,
  /** 部门下存在用户 */
  DEPT_HAS_USERS: 1136,
  
  // 状态异常（1141-1149）
  /** 角色已禁用 */
  ROLE_DISABLED: 1141,
  /** 字典已禁用 */
  DICT_DISABLED: 1143,
  
  // === 业务模块（2000-8999）===
  // 按需添加业务模块，每模块 100 个码位
  
  // === 通用错误（9000-9999）===
  
  // 参数验证（9000-9099）
  /** 参数错误 */
  INVALID_PARAMS: 9001,
  /** 必填字段缺失 */
  REQUIRED_FIELD: 9002,
  /** 格式错误 */
  INVALID_FORMAT: 9003,
  /** 值超出范围 */
  INVALID_VALUE: 9004,
  
  // 数据操作（9100-9199）
  /** 操作失败 */
  OPERATION_FAILED: 9101,
  /** 数据不存在 */
  DATA_NOT_FOUND: 9102,
  /** 数据已存在 */
  DATA_ALREADY_EXISTS: 9103,
  /** 数据正在使用中 */
  DATA_IN_USE: 9104,
  
  // 文件操作（9200-9299）
  /** 文件不存在 */
  FILE_NOT_FOUND: 9201,
  /** 文件过大 */
  FILE_TOO_LARGE: 9202,
  /** 文件类型不允许 */
  FILE_TYPE_NOT_ALLOWED: 9203,
  
  // 网络请求（9300-9399）
  /** 请求超时 */
  REQUEST_TIMEOUT: 9301,
  /** 网络错误 */
  NETWORK_ERROR: 9302,
  
  // === 系统错误（保留 HTTP 标准码）===
  /** 请求错误 */
  BAD_REQUEST: 400,
  /** 未授权 */
  UNAUTHORIZED: 401,
  /** 禁止访问 */
  FORBIDDEN: 403,
  /** 资源不存在 */
  NOT_FOUND: 404,
  /** 服务器错误 */
  INTERNAL_ERROR: 500,
} as const;

/**
 * 响应消息映射
 */
export const RESPONSE_MESSAGE = {
  [RESPONSE_CODE.SUCCESS]: '操作成功',
  
  // === 用户模块（1000-1099）===
  [RESPONSE_CODE.USER_EXIST]: '用户名已存在',
  [RESPONSE_CODE.USER_NOT_FOUND]: '用户不存在',
  [RESPONSE_CODE.INVALID_PASSWORD]: '密码错误',
  [RESPONSE_CODE.USER_DISABLED]: '账号已被禁用',
  
  // === RBAC 通用模块（1100-1199）===
  
  // 资源已存在（1101-1109）
  [RESPONSE_CODE.ROLE_EXIST]: '角色代码已存在',
  [RESPONSE_CODE.MENU_EXIST]: '菜单权限标识已存在',
  [RESPONSE_CODE.DICT_EXIST]: '字典代码已存在',
  [RESPONSE_CODE.DICT_DATA_EXIST]: '字典数据已存在',
  [RESPONSE_CODE.DEPT_EXIST]: '部门代码已存在',
  [RESPONSE_CODE.POST_EXIST]: '岗位代码已存在',
  
  // 资源不存在（1111-1119）
  [RESPONSE_CODE.ROLE_NOT_FOUND]: '角色不存在',
  [RESPONSE_CODE.MENU_NOT_FOUND]: '菜单不存在',
  [RESPONSE_CODE.DICT_NOT_FOUND]: '字典不存在',
  [RESPONSE_CODE.DICT_DATA_NOT_FOUND]: '字典数据不存在',
  [RESPONSE_CODE.DEPT_NOT_FOUND]: '部门不存在',
  [RESPONSE_CODE.POST_NOT_FOUND]: '岗位不存在',
  
  // 资源被使用（1121-1129）
  [RESPONSE_CODE.ROLE_IN_USE]: '角色正在使用中，无法删除',
  [RESPONSE_CODE.MENU_IN_USE]: '菜单已被角色使用，无法删除',
  [RESPONSE_CODE.DICT_IN_USE]: '字典正在使用中，无法删除',
  [RESPONSE_CODE.POST_IN_USE]: '岗位正在使用中，无法删除',
  
  // 有子项/关联（1131-1139）
  [RESPONSE_CODE.MENU_HAS_CHILDREN]: '菜单下存在子菜单，无法删除',
  [RESPONSE_CODE.DEPT_HAS_CHILDREN]: '部门下存在子部门，无法删除',
  [RESPONSE_CODE.DEPT_HAS_USERS]: '部门下存在用户，无法删除',
  
  // 状态异常（1141-1149）
  [RESPONSE_CODE.ROLE_DISABLED]: '角色已禁用',
  [RESPONSE_CODE.DICT_DISABLED]: '字典已禁用',
  
  // === 通用错误 ===
  
  // 参数验证（9000-9099）
  [RESPONSE_CODE.INVALID_PARAMS]: '参数错误',
  [RESPONSE_CODE.REQUIRED_FIELD]: '必填字段缺失',
  [RESPONSE_CODE.INVALID_FORMAT]: '格式错误',
  [RESPONSE_CODE.INVALID_VALUE]: '值超出范围',
  
  // 数据操作（9100-9199）
  [RESPONSE_CODE.OPERATION_FAILED]: '操作失败',
  [RESPONSE_CODE.DATA_NOT_FOUND]: '数据不存在',
  [RESPONSE_CODE.DATA_ALREADY_EXISTS]: '数据已存在',
  [RESPONSE_CODE.DATA_IN_USE]: '数据正在使用中',
  
  // 文件操作（9200-9299）
  [RESPONSE_CODE.FILE_NOT_FOUND]: '文件不存在',
  [RESPONSE_CODE.FILE_TOO_LARGE]: '文件过大',
  [RESPONSE_CODE.FILE_TYPE_NOT_ALLOWED]: '文件类型不允许',
  
  // 网络请求（9300-9399）
  [RESPONSE_CODE.REQUEST_TIMEOUT]: '请求超时',
  [RESPONSE_CODE.NETWORK_ERROR]: '网络错误',
  
  // === 系统错误 ===
  [RESPONSE_CODE.BAD_REQUEST]: '请求错误',
  [RESPONSE_CODE.UNAUTHORIZED]: '未授权',
  [RESPONSE_CODE.FORBIDDEN]: '无权限',
  [RESPONSE_CODE.NOT_FOUND]: '资源不存在',
  [RESPONSE_CODE.INTERNAL_ERROR]: '服务器内部错误',
} as const;

/**
 * 响应状态码类型
 */
export type ResponseCode = typeof RESPONSE_CODE[keyof typeof RESPONSE_CODE];

